package algo3.algothief.vista;

import java.io.BufferedReader;
import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.xml.sax.SAXException;

import algo3.algothief.excepcion.LugarInvalidoParaVisitarDesdeEPaislActualException;
import algo3.algothief.excepcion.CasoAunEnCursoException;
import algo3.algothief.excepcion.CasoNoIniciadoException;
import algo3.algothief.excepcion.NombreDelJugadorNoDefinidoException;
import algo3.algothief.excepcion.PaisInvalidoParaViajarDesdeElActualException;


public class VistaError {

	private static void borrarLaPantalla() {
		for (int i = 0; i < 42; i++)
			System.out.println();
	}
	
	private static void tiempoDeEsperaEntreDialogos(int miliSegundos) {
		try {
		    Thread.sleep(miliSegundos);
		} catch(InterruptedException ex) {
		    Thread.currentThread().interrupt();
		}
	}
	
	private static void graficarMensajeIntermedioEntreMensajes(BufferedReader entradaDeTeclado) throws IOException {
		System.out.println("(Presione enter para continuar)");
		entradaDeTeclado.readLine();
	}
	
 //---------------------------------------------------------------------------------------------------------
	
	public static void graficarMensajeDeError(ParserConfigurationException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("Hubo un error en la ejecucion del programa.");
		System.out.println("Lo mas probable es que sea un error en los archivos a causa de");
		System.out.println("algun cambio en los mismos.");
		
		VistaError.tiempoDeEsperaEntreDialogos(10000);
	}
	
	public static void graficarMensajeDeError(SAXException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("Hubo un error en la ejecucion del programa.");
		System.out.println("Lo mas probable es que sea un error en los archivos a causa de");
		System.out.println("algun cambio en los mismos.");
		
		VistaError.tiempoDeEsperaEntreDialogos(10000);
	}
	
	public static void graficarMensajeDeError(IOException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("Hubo un error en la ejecucion del programa.");
		System.out.println("Lo mas probable es que sea un error en los archivos a causa de");
		System.out.println("algun cambio en los mismos.");
		
		VistaError.tiempoDeEsperaEntreDialogos(10000);
	}
	
	public static void graficarMensajeDeError(TransformerException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("Hubo un error en la ejecucion del programa.");
		System.out.println("Lo mas probable es que sea un error en los archivos a causa de");
		System.out.println("algun cambio en los mismos.");
		
		VistaError.tiempoDeEsperaEntreDialogos(10000);
	}
	
	public static void graficarMensajeDeError(PaisInvalidoParaViajarDesdeElActualException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("El pais elegido no es un pais valido para viajar en");
		System.out.println("la partida actual. Intente con otro pais.");
		
		VistaError.tiempoDeEsperaEntreDialogos(5000);
	}
	
	public static void graficarMensajeDeError(LugarInvalidoParaVisitarDesdeEPaislActualException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("El lugar elegido no es un lugar valido para visitar");
		System.out.println("en la partida actual. Intente con otro lugar.");
		
		VistaError.tiempoDeEsperaEntreDialogos(5000);
	}
	
	public static void graficarMensajeDeError(CasoNoIniciadoException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("No se ha podido iniciar un nuevo caso. Verifique que");
		System.out.println("hay memoria suficiente en la plataforma como para poder");
		System.out.println("ser utilizada en el juego.");
		
		VistaError.tiempoDeEsperaEntreDialogos(10000);
	}
	
	public static void graficarMensajeDeError(CasoAunEnCursoException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("Por algun error interno, no se ha podido iniciar un");
		System.out.println("nuevo caso. Intente reiniciar el juego.");
		
		VistaError.tiempoDeEsperaEntreDialogos(10000);
	}
	
	public static void graficarMensajeDeError(NombreDelJugadorNoDefinidoException excepcion) {
		VistaError.borrarLaPantalla();
		
		System.out.println("Por algun error interno, no se ha podido guardar");
		System.out.println("la partida. Intente reiniciar el juego.");
		
		VistaError.tiempoDeEsperaEntreDialogos(10000);
	}
	
	
	
	public static void graficarMensajeDeOpcionElegidaIncorrecta(BufferedReader entradaDeTeclado) throws IOException {
		VistaError.borrarLaPantalla();
		
		System.out.println("La opcion elegida no es una opcion valida.");
		
		VistaError.tiempoDeEsperaEntreDialogos(250);
		
		System.out.println("Intenta nuevamente.");
		
		VistaError.graficarMensajeIntermedioEntreMensajes(entradaDeTeclado);
	}
}
